package org.zhadoop.stream.api.opereators;

import java.util.TreeMap;

import com.thoughtworks.xstream.annotations.XStreamAlias;
import com.thoughtworks.xstream.annotations.XStreamAsAttribute;
import com.thoughtworks.xstream.annotations.XStreamOmitField;

/**
 * 每个计算单元成为一个Operator
 * 定义了各类的操作
 * 分为两个操作：
 * SourceOperator
 * InnerFunctionOperator
 * 
 * @author zwd
 *
 */
public class Operator {
	
	/**
	 * 算子id
	 * 算子的ID各个算子之间的标志，要求名称必须一致
	 */
	@XStreamAsAttribute
	private String id;
	
	/**
	 * 算子名称
	 * 可选字段
	 */
	@XStreamAsAttribute
	@XStreamOmitField
	private String name;
	
	/**
	 * 并行度
	 * 设置该属性为xml的属性
	 */
	@XStreamAsAttribute
	@XStreamAlias("parallel")
	private int paralleNumber;
	
	/**
	 * 每个operator的参数都在这里放着
	 * 因为执行器不知道每个operator到底需要哪些参数，所以只能都放在map中
	 * 由上层客户端进行填充，并在底层运行时检测
	 * 为了防止输出的时候配置属性的便利顺序变化导致测试结果不一致，所以改为treemap
	 */
	@XStreamAlias("properties")
	private TreeMap<String, String> args;
	
	/**
	 * 构造函数
	 * @param id
	 * @param parallelNumber
	 */
	public Operator(String id,int parallelNumber) {
		super();
		this.id = id;
		this.name = id;
		this.paralleNumber = parallelNumber;
	}

	public String getId() {
		return id;
	}

	public void setId(String id) {
		this.id = id;
	}

	public String getName() {
		return name;
	}

	public void setName(String name) {
		this.name = name;
	}

	public int getParalleNumber() {
		return paralleNumber;
	}

	public void setParalleNumber(int paralleNumber) {
		this.paralleNumber = paralleNumber;
	}

	public TreeMap<String, String> getArgs() {
		return args;
	}

	public void setArgs(TreeMap<String, String> args) {
		this.args = args;
	}
}
